#include <iostream>
#include <unistd.h>
#include <signal.h>

using namespace std;

void handler(int signo)
{
    cout << "catch a signal : " << signo << endl;
}

void PrintPending(sigset_t &pending)
{
    for (int i = 31; i >= 1; i--)
    {
        if (sigismember(&pending, i))
            cout << "1";
        else
            cout << "0";
    }
    cout << "\n\n";
}

int main()
{

    sigset_t bset, oset;
    sigemptyset(&bset);
    sigemptyset(&oset);
    for (int i = 1; i <= 31; i++)
    {
        sigaddset(&bset, i); // 屏蔽了所有信号吗？？？9号和19号不会被屏蔽
    }
    sigprocmask(SIG_SETMASK, &bset, &oset);

    sigset_t pending;
    while (true)
    {
        //获取
        int n = sigpending(&pending);
        if (n < 0)
            continue;
        //打印
        PrintPending(pending);
        sleep(1);
    }


    // signal(2, handler);

    // // 数据准备
    // sigset_t bitset, oset;
    // sigemptyset(&bitset);
    // sigemptyset(&oset);
    // // 添加2号信号
    // sigaddset(&bitset, 2);

    // // 对2号信号进行屏蔽，设置进系统
    // sigprocmask(SIG_SETMASK, &bitset, &oset);

    // sigset_t pending;
    // int cnt;
    // // 重复获取pending表
    // while (true)
    // {
    //     // 获取
    //     int n = sigpending(&pending);
    //     if (n < 0)
    //         continue;
    //     // 打印
    //     PrintPending(pending);

    //     sleep(1);
    //     cnt++;
    //     // 解除阻塞
    //     if (cnt == 20)
    //     {
    //         cout << "signal unblock..." << endl;
    //         sigprocmask(SIG_SETMASK, &oset, nullptr);
    //     }
    // }

    // // 发送2号信号
    // //...

    return 0;
}